/*
    2020年5月24日16:20:08
    P62例3-1：C语言里算数表达式中的括号只有小括号。编写算法，判断一个
    表达式中的括号是否匹配，表达式已经存入字符数组exp[]中，表达中
    的字符个数为n
    分析：读到一个‘（’则入栈等待处理，再读到一个‘）’，则出栈一次，这样扫描完所有的字符
    最后再看栈的状态，若栈空则说明括号匹配，栈不空说明有括号不匹配
*/

#include <iostream>
using namespace std;

#define MAXSIZE 10

int match(char exp[], int n);

int main(int argc, char const *argv[])
{
    cout << "finish" << endl;
    return 0;
}

int match(char exp[], int n)
{
    //这两句话用来定义和初始化栈，考试中使用这种方法可以节省时间
    char stack[MAXSIZE];
    int top = -1;

    int i;
    for (i = 0; i < n; ++i)
    {
        if (exp[i] == '(')  //如果遇到‘（’则入栈等待后续处理
            stack[++top] = '('; //一句话完成入栈处理
        if (exp[i] == ')')
        {
            if (top == -1)  //如果当前遇到的括号是‘）’并且栈空，则不匹配，返回0
                return 0;
            else
                --top;  //栈不空则出栈，相当于完成了分析中的划掉一组括号的操作
        }
    }
    if (top == -1)  //栈空，说明所有的括号都是匹配的
        return 1;
    else
        return 0; //栈不空，说明括号并不匹配
}